package util;


/**
 * 经纬度工具类
 *
 * @date 2022/4/9
 */
public class CoordinateUtil {

    /**
     * 生成随机坐标，可配置最大值和最小值
     *
     * @param minLongitude 最小经度
     * @param maxLongitude 最大经度
     * @param minLatitude  最小纬度
     * @param maxLatitude  最大纬度
     * @return 经纬度用逗号分割，示例：41.532079,86.306517
     * @author wanglei
     * @date 2021/11/29
     */
    public static String randomPosition(
            String minLongitude, String maxLongitude,
            String minLatitude, String maxLatitude) {
        // 拼接经纬度
        String longitude = NumberUtil.randomDec(minLongitude, maxLongitude);
        String latitude = NumberUtil.randomDec(minLatitude, maxLatitude);
        return latitude + "," + longitude;
    }

    /**
     * 经纬度转换 ，度分秒转度
     *
     * @param jwd 经纬度
     * @return 经纬度小数
     * @date 2022/4/9
     */
    public static String Dms2D(String jwd) {
        //计算前进行数据处理
        jwd = jwd.replace("E", "").replace("N", "").replace(":", "").replace("：", "");
        double d = 0, m = 0, s = 0;
        d = Double.parseDouble(jwd.split("°")[0]);
        //不同单位的分，可扩展
        if (jwd.contains("′")) {//正常的′
            m = Double.parseDouble(jwd.split("°")[1].split("′")[0]);
        } else if (jwd.contains("'")) {//特殊的'
            m = Double.parseDouble(jwd.split("°")[1].split("'")[0]);
        }
        //不同单位的秒，可扩展
        if (jwd.contains("″")) {//正常的″
            //有时候没有分 如：112°10.25″
            s = jwd.contains("′") ? Double.parseDouble(jwd.split("′")[1].split("″")[0]) : Double.parseDouble(jwd.split("°")[1].split("″")[0]);
        } else if (jwd.contains("''")) {//特殊的''
            //有时候没有分 如：112°10.25''
            s = jwd.contains("'") ? Double.parseDouble(jwd.split("'")[1].split("''")[0]) : Double.parseDouble(jwd.split("°")[1].split("''")[0]);
        }
        jwd = String.valueOf(d + m / 60 + s / 60 / 60);//计算并转换为string
        return jwd.split("\\.")[0] + "." + jwd.split("\\.")[1].substring(0, 6);
    }
}
